什麼是類別?
類別是建立物件導向程式設計的基礎,可以幫助你在建立物件時定義你要的”藍圖“,物件都是類別的產物。什麼?你問說什麼是物件?
物件是一個獨立的”東西“,有自己的身份跟資料,比如說:
建立書的時候,以一個書類別為藍圖,這個類別定義了所有的書有什麼屬性
一個書名
一個作者
書頁,等等...
每本書都是一個物件,你可以做出許多的物件這都要感謝“書”這個類別。這就是建立類別的意義,在你的 ruby 裡類別都是可以重複使用的“藍圖”。只要知道怎麼撰寫類別,你就可以編寫物件導向程式設計了。
如何建立一個 ruby 類別,建立類別的語法就像這樣:
class Orange
end
請注意:
類別名稱要以大寫開頭,以 class 開頭 end 結尾,一個空的類別是非常的不好用,說歸說,但你還是可以從空類別建立物件。介紹其他建立類別的方法(像是 Class.new),但是這些方法只在特定情況下有用。
這個用法是將類別看成一個方法的容器使用,實體變數 & 常數,架構一個藍圖讓你可以在建立物件的時候使用。可以在建立物件的時候使用這些新方法。
像這樣:
Orange.new
你知道建立物件的過程稱作“實體化”,你可以稱那個物件是類別的實體。至於為什麼要建立物件呢?因為每個物件都是不同且獨一無二的。每個物件都有自己的身份。
比如說有一個 orange 類別,每個你創造 orange 物件都有他自己的重量,哪裡種的,什麼等級的品質等等。
當你開始加入實體方法&實體變數給類別,類別才會開始變得有用處。方法都是你的類別可以做的事。這樣比喻,你可以把橘子壓成果汁。那你就可以在類別裡面這樣做來實踐這個動作:
class Orange
def squeeze
puts "Here's your juice!"
end
end
orange = Orange.new
orange.squeeze
這些方法都會變成物件的指令。每一個你創造的橘子物件都可以使用"squeeze"方法,這是其中一個使用類別的好處。
class Orange
def initialize
@juice_available = 100
end
def squeeze
@juice_available -= 50
end
end
實體變數與區域變數不同,因為因為實體變數是以 @ 符號開頭,你無法在類別外使用除非你定義一個 attr_accessor。
當在 ruby 操作物件的時候,去了解類別跟物件是從哪裡做出來是對你非常有幫助的。試一試:
"".class
# String
[].class
# Array
orange.class
# Orange (assuming orange = Orange.new)
為什麼這會對你有幫助?
每一個方法都像是一個引擎幫助 ruby 運行,如果你熟悉這個類別知道有哪些方法,那所有從這個類別創造出來的物件你就知道有哪些方法可以使用。